package com.crois.barrier.admin.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhimydou.zdf.wf.domain.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.List;

/**
 * barrier api路由信息
 *
 * @author Hou Ze Yu
 * @version 1.0
 * @date 2021-10-25 11:58:25
 **/
@TableName("t_api_route_info")
@Getter
@Setter
@ToString
public class ApiRouteInfo extends AbstractBizEntity<Integer,Long> {


   /**
    *  
    */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

   /**
    *  api组id
    */
    @TableField("api_route_group_id")
    private Integer apiRouteGroupId;

   /**
    *  api组名称
    */
    @TableField("api_route_name")
    private String apiRouteName;

   /**
    *  api描述
    */
    @TableField("description")
    private String description;

   /**
    *  请求路径
    */
    @TableField("request_path")
    private String requestPath;

   /**
    *  是否跨域 1 是 0 否
    */
    @TableField("enable_cors")
    private Boolean enableCors;

   /**
    *  后端路径
    */
    @TableField("service_path")
    private String servicePath;

   /**
    *  匹配类型 1 精准匹配 2 模糊匹配
    */
    @TableField("match_type")
    private Integer matchType;

   /**
    *  服务转发策略
    */
    @TableField("upstream_strategy")
    private String upstreamStrategy;

   /**
    *  如果是listofserver策略需要字段
    */
    @TableField("service_name")
    private String serviceName;

    /***
     * url地址
     */
    private String url;

   /**
    *  前缀路由是否生效
    */
    @TableField("is_prefix")
    private Boolean isPrefix;

   /**
    *  路由状态 1 发布 0 未发布
    */
    @TableField("enabled")
    private Integer enabled;

   /**
    *  请求方法 GET POST  PUT DELETE OPTION
    */
    @TableField("request_method")
    private String requestMethod;

   /**
    *  后端方法  GET POST  PUT DELETE OPTION
    */
    @TableField("backend_method")
    private String backendMethod;

   /**
    *  协议  http / https
    */
    @TableField("protocol")
    private String protocol;

   /**
    *  入参请求模式 1 入参映射（过滤未知参数） 2 入参映射（透传未知参数） 3  入参透传
    */
    @TableField("enter_parameter_model")
    private Integer enterParameterModel;

   /**
    *  body数据类型 1 其他（json/文件等） 2 （Form）
    */
    @TableField("body_data_type")
    private Integer bodyDataType;

   /**
    *  contentType 类型 1 透传客户端contentType头 2 自定义contentType 内容 3 网关默认
    */
    @TableField("content_type")
    private Integer contentType;

   /**
    *  contentType 内容
    */
    @TableField("content_type_text")
    private String contentTypeText;

   /**
    *  body参数
    */
    @TableField("body_description")
    private String bodyDescription;

   /**
    *  权重
    */
    @TableField("weight")
    private Integer weight;

   /**
    *  超时时间
    */
    @TableField("timeout")
    private Long timeout;

   /**
    *  重试次数
    */
    @TableField("retry")
    private Long retry;

   /**
    *  否发布预发环境
    */
    @TableField("env_beta_publish")
    private Boolean envBetaPublish;

   /**
    *  否发布生产环境
    */
    @TableField("env_prod_publish")
    private Boolean envProdPublish;

   /**
    *  否发布测试环境
    */
    @TableField("env_test_publish")
    private Boolean envTestPublish;

    @TableField(exist = false)
    private String ApiGroupName;

    /**
     * APi参数
     */
    @TableField(exist = false)
    private List<ApiParameterInfo> apiParameter;

    /**
     * APi常量参数
     */
    @TableField(exist = false)
    private List<ApiParameterInfo> constantsParameter;

    /**
     * 返回值
     */
    @TableField(exist = false)
    private ApiResponseInfo apiResponse;

    /****
     * 指定的ips
     */
    @TableField(exist = false)
    private List<IpAndWeight> ipList;

    /**
     * 插件
     */
    @TableField(exist = false)
    private List<String> plugins;

    @Override
    public Integer getId() {
        return id;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }
}